home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / mint / mfs055 / mfsconf.c < prev    next >
C/C++ Source or Header  |  1991-12-10  |  3KB  |  158 lines

  1. /* Minixfs translation configurer */
  2.  
  3. #include <sys/types.h>
  4. #include <mintbind.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. #include "minixfs.h"
  9.  
  10. #ifdef __STDC__
  11. # define    P(s) s
  12. #else
  13. # define P(s) ()
  14. #endif
  15.  
  16.  
  17. /* mfsconf.c */
  18. int main P((int argc , char **argv ));
  19. int usage P((void ));
  20. long tr_get P((long arg , int chr ));
  21. char *tr_text P((int arg ));
  22.  
  23. #undef P
  24.  
  25. long trans;
  26.  
  27. main(argc,argv)
  28. int argc;
  29. char **argv;
  30. {
  31.     extern char *optarg;
  32.     static char err=0;
  33.     char c;
  34.         extern int opterr;
  35.     long tmp;
  36.     if(argc==1) usage();
  37.  
  38.     if( Dcntl(MFS_VERIFY,argv[1],&trans) || (trans!=MFS_MAGIC) )
  39.     {
  40.         fprintf(stderr,"Pathname: %s is not a minix partition.\n"
  41.                 ,argv[1]);
  42.         exit(1);
  43.     }
  44.  
  45.     Dcntl(MFS_GTRANS,argv[1],&trans);
  46.  
  47.     if(argc==2)
  48.     {
  49.         printf("Minix Filesystem Configuration:\n");
  50.         printf("Directory Translation %s.\n",tr_text(DIR_TOS));
  51.         printf("Search Translation    %s.\n",tr_text(SRCH_TOS));
  52.         printf("Auto Exec Setting     %s.\n",tr_text(AEXEC_TOS));
  53.         printf("Lower Case Creation   %s.\n",tr_text(LWR_TOS));
  54.         exit(0);
  55.     }
  56.  
  57.     /* Parse command-line options */
  58.     opterr=0;
  59.     while((c=getopt(argc-1,&argv[1],"l:L:d:D:s:S:x:X:"))!=EOF)
  60.     {
  61.             switch(c){
  62.  
  63.                 case 'l':
  64.             case 'L':
  65.             trans &= ~(LWR_TOS|LWR_MNT); 
  66.             tmp=tr_get(LWR_TOS,optarg[0]);
  67.             if(tmp==-1) err=1;
  68.             else trans |=tmp;
  69.             break;
  70.  
  71.             case 'd':
  72.             case 'D':
  73.             trans &= ~(DIR_TOS | DIR_MNT);
  74.             tmp=tr_get(DIR_TOS,optarg[0]);
  75.             if(tmp==-1) err=1;
  76.             else trans |=tmp;
  77.             break;
  78.     
  79.             case 'x':
  80.             case 'X':
  81.             trans &= ~(AEXEC_TOS | AEXEC_MNT);
  82.             tmp=tr_get(AEXEC_TOS,optarg[0]);
  83.             if(tmp==-1)err=1;
  84.             else trans |=tmp;            
  85.             break;
  86.             
  87.             case 's':
  88.             case 'S':
  89.             trans &= ~(SRCH_TOS | SRCH_MNT);
  90.             tmp= tr_get(SRCH_TOS,optarg[0]);
  91.             if(tmp==-1) err=1;
  92.             else trans |=tmp;
  93.             break;
  94.  
  95.             case '?':
  96.             err=1;
  97.             break;
  98.         }
  99.     }
  100.     if(err) usage();
  101.  
  102.     Dcntl(MFS_STRANS,argv[1],&trans);
  103.     exit(0);
  104. }
  105.  
  106. usage()
  107. {
  108.     fprintf(stderr,"Usage : mfsconfig path -[ldsx] [m|t|b|n]\n");
  109.     fprintf(stderr,"'path' is any minix filesystem path\n");
  110.     fprintf(stderr,"-l : Lower case creation\n");
  111.     fprintf(stderr,"-d : Directory entry translation\n");
  112.     fprintf(stderr,"-s : Search translation\n");
  113.     fprintf(stderr,"-x : Exec translation\n");
  114.     fprintf(stderr,"m : MiNT domain only\n");
  115.     fprintf(stderr,"t : TOS domain only\n");
  116.     fprintf(stderr,"b : Both domains (always)\n");
  117.     fprintf(stderr,"n : Neither domain (never)\n");
  118.     exit(1);
  119. }
  120.  
  121. long tr_get(arg,chr)
  122. long arg ;
  123. char chr;
  124. {
  125.     switch(chr)
  126.     {
  127.         case 'b':
  128.         case 'B':
  129.         return (arg | (arg<<1)) ;
  130.  
  131.         case 'n':
  132.         case 'N':
  133.         return 0;
  134.  
  135.         case 't':
  136.         case 'T':
  137.         return arg;
  138.  
  139.         case 'm':
  140.         case 'M':
  141.         return arg<<1;
  142.         
  143.         default :
  144.         return -1;
  145.     }
  146. }
  147.  
  148. char *tr_msg[] = {"Never","TOS domain","MiNT domain","Always"} ;
  149.  
  150. char *tr_text(arg)
  151. {
  152.     int index;
  153.     index=0;
  154.     if(trans & arg) index |= 1;
  155.     if(trans & (arg<<1) ) index |= 2;
  156.     return tr_msg[index];
  157. }
  158.